package logica;

import logica.exceptions.RequiredDataException;
import logica.interfaces.CategoryIF;

/**
 * Uma categoria do sistema de leilao virtual. Uma categoria pode ser vinculada
 * a um produto.
 *
 */
public class Category implements CategoryIF {

	// Identificador da categoria
	private String categoryId;
	// nome da categoria
	private String name;

	/**
	 * Construtor de uma categoria de produtos do leilao virtual.
	 *
	 * @param id
	 *            O identificador da categoria.
	 * @param name
	 *            O nome da categoria.
	 * @throws RequiredDataException
	 *             Se algum dos parametros for nulo ou vazio.
	 */
	public Category(String id, String name) throws RequiredDataException {
		this.setId(id);
		this.setName(name);
	}

	/**
	 * Retorna o identificador da categoria.
	 *
	 * @return O identificador da categoria.
	 */
	public String getId() {
		return this.categoryId;
	}

	/**
	 * Retorna o nome da categoria.
	 *
	 * @return O nome da vategoria.
	 */
	public String getName() {
		return this.name;
	}

	/**
	 * Atualiza o identificador da categoria.
	 *
	 * @param id
	 *            O novo identificador da categoria.
	 * @throws RequiredDataException
	 *             Se o id for nulo ou vazio.
	 */
	public void setId(String id) throws RequiredDataException {
		if ((id == null) || (id.equals("")))
			throw new RequiredDataException("category id");

		this.categoryId = id;
	}

	/**
	 * Atualiza o nome da categoria.
	 *
	 * @param name
	 *            O novo nome da categoria.
	 * @throws RequiredDataException
	 *             Se o nome for nulo ou vazio.
	 */
	public void setName(String name) throws RequiredDataException {
		if ((name == null) || (name.equals("")))
			throw new RequiredDataException("category name");

		this.name = name;
	}

	/**
	 * Comparar se categorias sao iguais.
	 *
	 * @return True se as categorias tiverem o mesmo nome.
	 */
	public boolean equals(Object obj) {
		if (obj instanceof Category) {
			Category category = (Category) obj;
			return category.getName().equals(this.name);
		}
		return false;
	}

	/**
	 * Retorna a versao em String da categoria.
	 *
	 * @return A versao em String da categoria.
	 */
	public String toString() {
		return this.categoryId + " - " + this.name;
	}

}
